function [data] = load_data_fullmodel(indivRunFolders)
	%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
	% This function loads data from the 3 submodels and combines the whole thing into an object called data.
	%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
	%%%%% Inputs:
	% indivRunFolders:					object:
	%	.consumerAdoptions:					string
	%	.providerAdoptions:					string
	%	.providerExits:						string
	%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
	%%%%% Outputs:
	% data:								object:
	%	.consumerAdoptions:					object
	%	.providerAdoptions:					object
	%	.providerExits:						object
	%	.periodLabels:						cell(T,1) of strings
	%	.geoLabels:							cell(K,1) of strings
	%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
	
	load(sprintf('%s/runData.mat', indivRunFolders.providerAdoptions), 'data');
	providerAdoptions_data = data;
	periodLabels1      = data.periodLabels;
	geoLabels1         = data.geoLabels;
	population1        = data.population;
	surfaces1          = data.surfaces;
	incomingCommuters1 = data.incomingCommuters;
	touristBeds1       = data.touristBeds;
	
	clear data;
	
	load(sprintf('%s/runData.mat', indivRunFolders.providerExits), 'data');
	providerExits_data = data;
	periodLabels2      = data.periodLabels;
	geoLabels2         = data.geoLabels;
	population2        = data.population;
	surfaces2          = data.surfaces;
	incomingCommuters2 = data.incomingCommuters;
	touristBeds2       = data.touristBeds;
	clear data;
	
	load(sprintf('%s/runData.mat', indivRunFolders.consumerAdoptions), 'data');
	consumerAdoptions_data = data;
	periodLabels3      = data.periodLabels;
	geoLabels3         = data.geoLabels;
	population3        = data.population;
	surfaces3          = data.surfaces;
	incomingCommuters3 = data.incomingCommuters;
	touristBeds3       = data.touristBeds;
	clear data;
	
	data.consumerAdoptions = consumerAdoptions_data;
	data.providerAdoptions  = providerAdoptions_data;
	data.providerExits      = providerExits_data;
	
	clear consumerAdoptions_data providerAdoptions_data providerExits_data;
	
	%%% Read dimensions + check consistency
	T = data.consumerAdoptions.dims.dims1{4};
	K1 = data.consumerAdoptions.dims.dims1{5};
	K2 = data.consumerAdoptions.dims.dims1{6};
	
	Tb  = data.providerAdoptions.dims.dims1{2};
	K  = data.providerAdoptions.dims.dims1{3};
	
	TKc = data.providerExits.dims.dims1{1};
	
	if T ~= Tb || K1 ~= K || K2 ~= K || T*K ~= TKc; error('Dimensions are inconsistent'); end;
	clear Tb TKc;
	
	if ~isequal(periodLabels1, periodLabels2) || ~isequal(periodLabels1, periodLabels3);
		error('Inconsistency in period labels');
	end
	if ~isequal(geoLabels1, geoLabels2) || ~isequal(geoLabels1, geoLabels3);
		error('Inconsistency in geo labels');
	end
	if ~isequal(population1, population2) || ~isequal(population1, population3);
		error('Inconsistency in geo labels');
	end
	if ~isequal(surfaces1, surfaces2) || ~isequal(surfaces1, surfaces3);
		error('Inconsistency in geo labels');
	end
	if ~isequal(incomingCommuters1, incomingCommuters2) || ~isequal(incomingCommuters1, incomingCommuters3);
		error('Inconsistency in geo labels');
	end
	if ~isequal(touristBeds1, touristBeds2) || ~isequal(touristBeds1, touristBeds3);
		error('Inconsistency in geo labels');
	end
	
	data.periodLabels = periodLabels1;
	data.geoLabels    = geoLabels1;
	data.population        = population1;        % K x 1
	data.surfaces          = surfaces1;          % K x 1
	data.incomingCommuters = incomingCommuters1; % K x 1
	data.touristBeds       = touristBeds1;       % K x 1
end
